﻿/*
*Author:sohighthesky
*From:http://blog.csdn.net/sohighthesky  
*Date:2009-11-9
*/
/*
*box 指定要显示消息框或者其id
*options:参见代码中setOptions中的注释
*/
var sheyMsg = function (box, options) {
    this.box = this.g(box);
    this.setOptions(options);
    this.init();
}
sheyMsg.prototype = {
    ae: function (e, call) {
        if (window.addEventListener) window.addEventListener(e, call, false);
        else window.attachEvent("on" + e, call);
    },
    g: function (id) { return typeof (id) == "string" ? document.getElementById(id) : id; },
    isFixed: !window.ActiveXObject || (navigator.userAgent.indexOf("MSIE 6") == -1 && document.compatMode == "CSS1Compat"),
    setOptions: function (options) {
        this.options = {//默认配置
            showDelay: 10, //显示延时
            autoHide: 30, //自动隐藏时间，设置为0时，不自动隐藏
            onShow: function () { }, //显示后调用
            onHide: function () { } //隐藏后调用
        };
        for (var o in options) {
            this.options[o] = options[o];
        }
    },
    hide: function () {//隐藏
        var _top = this.box.clientHeight;
        var o = this;
        if (/ing$/.test(o.status)) return;
        o.status = "hiding";
        clearTimeout(o.tt);
        o.t = setInterval(function () {
            if (o.isFixed)
                o.box.style.bottom = (-o.box.clientHeight + (--_top)) + 'px';
            else
                o.box.style.top = o.de.scrollTop + o.de.clientHeight - 5 - (--_top) + "px";
            if (_top == -5) {
                clearInterval(o.t);
                o.status = "hide";
                o.box.style.display = "none";
                o.options.onHide();
            }
        }, 5);
    },
    show: function () {//显示
        var _top = 0;
        var o = this;
        if (/ing$/.test(o.status)) return;
        o.status = "showing";
        clearTimeout(o.tt);
        o.box.style.display = "block";
        o.t = setInterval(function () {
            if (o.isFixed)
                o.box.style.bottom = (-o.box.clientHeight + (++_top)) + "px";
            else
                o.box.style.top = (o.de.scrollTop + o.de.clientHeight - 5 - (++_top)) + "px";
            if (_top == o.box.clientHeight) {
                clearInterval(o.t);
                o.status = "show";
                o.options.onShow();
                var h = o.options.autoHide - 0;
                if (h) o.tt = setTimeout(function () { o.hide(); }, h * 1000);
            }
        }, 1);
    },
    fixIE6: function () {//IE6 滚动定位
        this.box.style.left = this.de.scrollLeft + this.de.clientWidth - this.box.clientWidth - 2 + "px";
        if (this.status == "show") {
            this.box.style.top = this.de.scrollTop + this.de.clientHeight - this.box.clientHeight - 5 + "px";
        } else if (this.status == "hide") {
            this.box.style.top = this.de.scrollTop + this.de.clientHeight + 5 + "px";
        }
    },
    init: function () {
        with (this.box.style) {
            display = "block"; //显示之后才能取出宽度和高度
            if (this.isFixed) {
                position = "fixed";
                right = "2px";
                bottom = (-this.box.clientHeight - 5) + "px";
            } else {
                position = "absolute";
            }
        }
        this.status = "hide";
        var o = this;
        if (!this.isFixed) {
            o.de = document.compatMode == "CSS1Compat" ? document.documentElement : document.body;
            var timer;
            this.ae("resize", function () { clearTimeout(timer); timer = setTimeout(function () { o.fixIE6.call(o) }, 30); });
            this.ae("scroll", function () { clearTimeout(timer); timer = setTimeout(function () { o.fixIE6.call(o) }, 30); });
            this.fixIE6(); //加载时指定位置
        }
        o.box.style.display = "none";
        o.tt = setTimeout(function () { o.show(); }, o.options.showDelay * 1000);
    }
}